package models

import (
	"time"

	"github.com/astaxie/beego/orm"
	_ "github.com/go-sql-driver/mysql"
)

func RegisterDB() {
	orm.RegisterDriver("mysql", orm.DRMySQL)
	orm.RegisterDataBase("default", "mysql", "root:p123456@tcp(120.24.168.102:3306)/LoveU?charset=utf8")
	orm.RegisterModel(new(User), new(Friend), new(Friendrequest),
		new(Pinformation), new(Mood), new(Comment), new(Album),
		new(Area), new(Admin), new(Viprequest), new(Activity),
		new(Attend), new(Aphorism), new(Edition))

}

//用户表
type User struct {
	Id       int64  //主键
	Name     string //用户名
	Phone    string //个人电话
	Password string //密码
	Frozen   bool   `orm:"default(0)"` //账号冻结
}

// 管理员账号
type Admin struct {
	Id       int64  //主键
	Name     string //用户名
	Password string //密码
}

// VIP申请表
type Viprequest struct {
	Id           int64  //主键
	Userid       int64  //用户ID
	Picurl1      string //手持身份证照片
	Picurl2      string //身份证正面照片
	Picurl3      string //身份证背面照片
	Agree        int64  `orm:"default(0)"` //0:忽略（默认忽略）；1:同意申请；2:拒绝申请
	Refusereason string `orm:"null"`       //拒绝理由
	Useless      bool   `orm:"default(0)"` //false.可用状态， true.类似删除状态
}

// 活动圈发布的信息
type Activity struct {
	Id      int64     //主键
	Content string    `orm:"size(3000)"` //活动内容
	Data    time.Time //活动发布时间
	Adminid int64     //活动发布员
	Delete  bool      `orm:"default(0)"` //默认不删除
}

type Attend struct {
	Id         int64     //主键
	Activityid int64     //活动的id
	Userid     int64     //参加的用户
	Data       time.Time `orm:"auto_now;type(datetime)"` //参加活动时间
	Finish     bool      `orm:"default(0)"`              //活动是否完成，默认未完成
}

// 行政区数据库
type Area struct {
	Id       int64  //主键
	Province int64  //省份
	Country  int64  //市
	County   int64  //县
	Name     string //名字
}

//个人信息表
type Pinformation struct {
	Id             int64     //主键
	Autograph      string    `orm:"null"` //个人签名
	Vip            bool      //用户是否是VIP（用户等级）
	Gentle         int64     `orm:"default(0)"` //性别（0：默认未选  1：男  2：女）
	Birthday       time.Time //生日
	Area           int64     //所在地
	Job            string    //工作
	Salary         float64   //工资
	HaveKids       bool      //是否有孩子
	Parentsalive   bool      //父母是否健在
	Maritallstatus string    //婚姻状况
	Emotion        string    //情感经历
	Hobby          string    //爱好
	Requir         string    //求偶要求(好友印象/自我性格)
	Avatar         string    //个人头像
	Userid         int64     //用户ID
}

//用户“预”评估分数表
type UserEvaluation struct {
	Userid int64   `orm:"pk;unique"`
	beauty float64 `orm:"null"`
}

// 个人好友
type Friend struct {
	Id       int64 //主键
	Userid   int64 //用户ID
	Friendid int64 //好友ID
}

// 好友申请
type Friendrequest struct {
	Id          int64     //主键
	Userid      int64     //申请人
	Requestedid int64     //被申请人
	Attach      string    //附加信息
	Agree       int64     //0:忽略（默认忽略）；1:同意申请；2:拒绝申请
	Date        time.Time `orm:"auto_now;type(datetime)"`
}

//心情（类似微博）
type Mood struct {
	Id      int64     //主键
	Userid  int64     //用户ID
	Content string    `orm:"size(3000)"`              //内容
	Date    time.Time `orm:"auto_now;type(datetime)"` //发表时间
}

//对某心情的“赞”
type MoodLikes struct {
	Id     int64     //主键
	Userid int64     //用户ID
	Moodid int64     //心情ID
	Date   time.Time `orm:"auto_now;type(datetime)"` //点赞时间
}

//评论
type Comment struct {
	Id       int64
	Userid   int64
	Type     bool `orm:"default(1)"` // 默认评论的对象是心情
	Targetid int64
	Content  string
	Date     time.Time `orm:"auto_now;type(datetime)"`
}

//个人相册
type Album struct {
	Id      int64  //主键
	Userid  int64  //用户ID
	Picname string //照片url
}

//格言
type Aphorism struct {
	Id      int64  //ID
	Content string `orm:"size(512)"` //格言内容
	Author  string //格言作者
}

//版本更新
type Edition struct {
	Id            int64     //主键id
	Editon        float64   //版本
	Title         string    //标题
	Updatecontent string    `orm:"size(3000)"` //更新内容
	Url           string    //下载地址
	Date          time.Time `orm:"auto_now;type(datetime)"`
}

// 活动圈返回的信息
type ActivityReturn struct {
	Id      int64     //主键
	Content string    `orm:"size(3000)"` //活动内容
	Data    time.Time //活动发布时间
	// Adminid int64     //活动发布员
	// Delete  bool      `orm:"default(0)"` //默认不删除
	Attended bool
}

//好友列表返回信息
type UserReturn struct {
	Id     int64  //用户ID
	Name   string //用户名
	Avatar string //头像
}

//管理员获取用户VIP申请信息
type AdminVIPReturn struct {
	Userid int64         //用户Id
	Name   string        //用户名
	PInfo  *Pinformation //用户详情
	Vip    *Viprequest   //申请
}

// 给每个用户的相对评分
type UserScore struct {
	Id         int64
	Summary    float64 //综合评分，取以下7项的加权平均值
	Beauty     float64 //颜值分（未实现，取随机数）
	Hobby      float64 //爱好分（n/(n+1),n>=1; 0.1,n=0）
	Jobscore   float64 //工作匹配分（未实现，取随机数）
	Residence  float64 //住处匹配分（同市0.8，同省0.7，省外0.5）
	Agescore   float64 //年龄匹配分（年龄差>=80%，对方年轻度<=20%）
	Impression float64 //印象或性格分（n/(n+1),n>=1; 0.1,n=0）
	Emotion    float64 //情感分（n/(n+1),n>=1; 0.1,n=0）

	Name   string //昵称
	IsVip  bool   //VIP标记
	Avatar string //头像URL
	Age    int    //年龄
	Job    string //工作
}

// 用户详细信息的返回
type UserInfoReturn struct {
	Pinformation
	Phone string
	AreaName string
}

// 心情信息的返回
type MoodReturn struct {
	Mood
	CommentsCount int
}

// 地区信息的返回
type AreaResult struct {
	Id int64
	Provinceid int64
	Countryid int64
	Countyid int64
	Province string
	Country string
	County string
}

// 用于列表显示的某用户VIP申请
type UserRequestedVip struct {
	Id     int64
	userid int64
	Name   string
	Avatar string
	Status int64
}